﻿'Digite o NameSpace: Babok
'Digite o nome da Classe de dominio: Backlog

'--TESTE:-----------
'    <TestMethod()> _
'    Public Sub SalvarBacklog()
'        Dim _Backlog As Backlog
'        _Backlog = New Backlog
'
'        _Backlog.Salvar()
'
'        Assert.IsTrue(_Backlog.Id.HasValue)
'    End Sub
<Serializable()> _
Public Class Backlog
    Inherits BaseDominio

    Private _nomeProduto As String
    Public Overridable Property NomeProduto() As String
        Get
            Return _nomeProduto
        End Get
        Set(ByVal value As String)
            '_nomeProduto = value
        End Set
    End Property

    Private _descricao As String
    Public Overridable Property Descricao() As String
        Get
            Return _descricao
        End Get
        Set(ByVal value As String)
            '_descricao = value
        End Set
    End Property

    Private _itensPriorizados As IList(Of ItemPriorizado)
    Public Overridable Property ItensPriorizados() As IList(Of ItemPriorizado)
        Get
            Return _itensPriorizados
        End Get
        Set(ByVal value As IList(Of ItemPriorizado))
            _itensPriorizados = value
        End Set
    End Property


#Region "Negocio"

    Public Sub New()
        MyBase.New()
    End Sub

    Public Sub New(ByVal _nomeDoProduto As String, ByVal _descricao As String)
        MyBase.New()
        Me._nomeProduto = _nomeDoProduto
        Me._descricao = _descricao
    End Sub

    Public Overridable Sub AlterarNomeProduto(ByVal _nomeProduto As String)
        Me.NomeProduto = _nomeProduto
        Me.BacklogDao.Alterar(Me)
    End Sub

    Public Overridable Sub AlterarDescricao(ByVal _descricao As String)
        Me.Descricao = _descricao
        Me.BacklogDao.Alterar(Me)
    End Sub

    Public Overridable Function Buscar(ByVal _id As Long) As Backlog
        Return MyBase.BacklogDao.Buscar(_id)
    End Function

    Public Overridable Sub AdicionarItemPriorizado(ByVal _item As ItemPriorizado)
        If Me.ItensPriorizados Is Nothing Then Me.ItensPriorizados = New List(Of ItemPriorizado)

        If Not Me.Id.HasValue Then Throw New BacklogException("Só é possível adicionar Item priorizado em um backlog já salvo.")

        Me.ItensPriorizados.Add(_item)
        _item.BackLog = Me

        _item.Salvar()

    End Sub

    Public Overridable Sub Salvar()

        For Each _item In _itensPriorizados
            _item.BackLog = Me
        Next

        MyBase.BacklogDao.Salvar(Me)
    End Sub

#End Region

End Class
